package utp.tepc.jogogeneral;

import java.util.*;

public class JogadorDado extends Jogador
{
    private int qtdLances;
    private List<Dado> dados;
    private List<PontuacaoDado> pontuacao;

    public JogadorDado(String nome)
    {
	super(nome);
	this.qtdLances = 0;
	this.pontuacao = new ArrayList<PontuacaoDado>();
    }

    public int getQtdLances()
    {
	return this.qtdLances;
    }

    public void selecionarDado(Dado dado) throws Exception
    {
	if (this.dados.size() <= 0)
	    throw new Exception("O jogador " + this.toString() + " está sem dados.");

	dado.setSeleciondao(true);
    }

    public void lancarDados() throws Exception
    {
	if (this.dados.size() <= 0)
	    throw new Exception("O jogador " + this.toString() + " está sem dados.");

	for (Dado d : this.dados)
	{
	    if (!d.isSeleciondao())
		d.sortearNumero();
	}

	this.qtdLances++;
    }

    public void setDados(List<Dado> dados) throws Exception
    {
	if (dados.size() < 0)
	    throw new Exception("Não foi passado os dados para o jogador: " + this.toString());

	if (this.dados != null)
	    throw new Exception("O jogador: " + this.toString() + " já possui dados.");

	this.dados = dados;
    }

    public List<Dado> getDados() throws Exception
    {
	if (this.dados == null)
	    throw new Exception("Não foi passado os dados para o jogador: " + this.toString());

	if (this.dados.size() <= 0)
	    throw new Exception("Não foi passado os dados para o jogador: " + this.toString());

	return this.dados;
    }

    public void liberarDados()
    {
	this.qtdLances = 0;
	this.dados = null;
    }

    public HashMap<String, Integer> getPontuacao()
    {
	HashMap<String, Integer> pontos = new HashMap<String, Integer>();

	for (PontuacaoDado p : this.pontuacao)
	    pontos.put(p.getTipoPontuacao(), p.getPonto());

	return pontos;
    }
    
    public List<PontuacaoDado> getPontos()
    {
	return pontuacao;
    }

    public void marcarPonto(PontuacaoDado p)
    {
	this.pontuacao.add(p);
    }
}
